<?php

namespace maotool\util;

use maotool\exception\Exception;

/**
 * 网络工具类
 */
class NetUtil
{

    /**
     * 检测端口是否被占用
     * @return bool
     */
    public static function isPortExist($port)
    {
        $service = @fsockopen("localhost", $port, $errno, $errMsg, "2");
        if ($service) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 检测端口是否被占用
     * @return bool
     */
    public static function isPortNotExist($port)
    {
        return !self::isPortExist($port);
    }

    /**
     * 生成随机可用的端口
     * @return int
     * @throws Exception
     */
    public static function randomPort()
    {
        $i = 0;
        while (true) {
            $port = rand(10000, 65535);
            if (self::isPortNotExist($port)) {
                return $port;
            }
            if ($i >= 100) {
                throw new Exception("获取随机端口失败 超出尝试次数");
            }
            ++$i;
        }
    }

}